package cn.zl.rtsp.udp;

public class UDPPortManage {

    private final int INCR = 2;  //端口自增步长
    private int RTP_PORT = 56400;
    private int RTCP_PORT = 56401;

    // 使用 volatile 关键字防止指令重排序，确保多线程环境下的正确初始化
    private static volatile UDPPortManage instance;

    // 私有构造函数，防止外部通过new创建实例
    private UDPPortManage(){}

    // 提供一个公有的静态方法，返回唯一实例
    public static UDPPortManage getInstance() {
        // 第一次检查，如果不为null，则直接返回，避免进入同步块
        if (instance == null) {
            synchronized (UDPPortManage.class) {
                // 第二次检查，确保在多线程环境中只有一个线程能够创建实例
                if (instance == null) {
                    instance = new UDPPortManage();
                }
            }
        }
        return instance;
    }

    public UDPPort getUDPPort(){
        RTP_PORT += INCR;
        RTCP_PORT += INCR;
        return new UDPPort(RTP_PORT, RTCP_PORT);
    }


}
